home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 37 / IOPROG_37.ISO / SOFT / Multilizer.exe / disk1 / data1.cab / data1 / [Group9]VCL Source Standard / ivtargsd.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-12  |  6.1 KB  |  244 lines

  1. unit IvTargsd;
  2.  
  3. {$I IVMULTI.INC}
  4.  
  5. interface
  6.  
  7. uses
  8.   Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls,
  9.   IvMulti;
  10.  
  11. type
  12.   TIvTargetPropertiesDialog = class(TForm)
  13.     OKButton: TButton;
  14.     CancelButton: TButton;
  15.     AddButton: TButton;
  16.     RemoveButton: TButton;
  17.     EditButton: TButton;
  18.     HelpButton: TButton;
  19.     DetectButton: TButton;
  20.     List: TListView;
  21.     procedure AddButtonClick(Sender: TObject);
  22.     procedure EditButtonClick(Sender: TObject);
  23.     procedure RemoveButtonClick(Sender: TObject);
  24.     procedure HelpButtonClick(Sender: TObject);
  25.     procedure DetectButtonClick(Sender: TObject);
  26.     procedure UpdateButtons(Sender: TObject);
  27.     procedure FormDestroy(Sender: TObject);
  28.     procedure ListKeyDown(Sender: TObject; var Key: Word;
  29.       Shift: TShiftState);
  30.     procedure FormCreate(Sender: TObject);
  31.  
  32.   private
  33.     FTranslator: TIvTranslator;
  34.  
  35.   protected
  36.     procedure ClearList;
  37.  
  38.     function GetItem(i: Integer): TIvTargetProperty;
  39.  
  40.     procedure AddItem(item: TIvTargetProperty);
  41.     procedure AddNew(
  42.       const targetClassName, targetPropertyName: String;
  43.       targetType: TIvTargetType);
  44.     procedure UpdateListItem(listItem: TListItem);
  45.  
  46.   public
  47.     procedure GetItems(items: TIvTargetProperties);
  48.     procedure SetItems(items: TIvTargetProperties);
  49.  
  50.     property Items[i: Integer]: TIvTargetProperty read GetItem;
  51.     property Translator: TIvTranslator read FTranslator write FTranslator;
  52.   end;
  53.  
  54. implementation
  55.  
  56. {$R *.DFM}
  57.  
  58. uses
  59.   Registry,
  60.   IvDictio, IvTargD, IvParser;
  61.  
  62. function TIvTargetPropertiesDialog.GetItem(i: Integer): TIvTargetProperty;
  63. begin
  64.   Result := List.Items[i].Data;
  65. end;
  66.  
  67. procedure TIvTargetPropertiesDialog.AddItem(item: TIvTargetProperty);
  68. var
  69.   listItem: TListItem;
  70. begin
  71.   listItem := List.Items.Add;
  72.   listItem.SubItems.Add('');
  73.   listItem.SubItems.Add('');
  74.   listItem.Data := item;
  75.   UpdateListItem(listItem);
  76. end;
  77.  
  78. procedure TIvTargetPropertiesDialog.UpdateListItem(listItem: TListItem);
  79. const
  80.   TYPES_C: array[TIvTargetType] of String = ('Include', 'Exclude');
  81. var
  82.   target: TIvTargetProperty;
  83. begin
  84.   target := listItem.Data;
  85.   listItem.Caption := target.TargetClassName;
  86.   listItem.SubItems[0] := target.TargetPropertyName;
  87.   listItem.SubItems[1] := TYPES_C[target.TargetType];
  88. end;
  89.  
  90. procedure TIvTargetPropertiesDialog.AddNew(
  91.   const targetClassName, targetPropertyName: String;
  92.   targetType: TIvTargetType);
  93. var
  94.   i: Integer;
  95. begin
  96.   for i := 0 to List.Items.Count - 1 do
  97.   begin
  98.     if (CompareText(Items[i].TargetClassName, targetClassName) = 0) and
  99.       (CompareText(Items[i].TargetPropertyName, targetPropertyName) = 0) and
  100.       (Items[i].TargetType = targetType) then
  101.     begin
  102.       Exit;
  103.     end;
  104.   end;
  105.  
  106.   // Not found. Adds the target
  107.  
  108.   AddItem(TIvTargetProperty.Create(targetClassName, targetPropertyName, targetType));
  109. end;
  110.  
  111. procedure TIvTargetPropertiesDialog.GetItems(items: TIvTargetProperties);
  112. var
  113.   i: Integer;
  114. begin
  115.   for i := 0 to List.Items.Count - 1 do
  116.     items.Add(Self.Items[i].Copy);
  117. end;
  118.  
  119. procedure TIvTargetPropertiesDialog.SetItems(items: TIvTargetProperties);
  120. var
  121.   i: Integer;
  122. begin
  123.   for i := 0 to items.Count - 1 do
  124.     AddItem(items[i].Copy);
  125.   UpdateButtons(Self);
  126. end;
  127.  
  128. procedure TIvTargetPropertiesDialog.DetectButtonClick(Sender: TObject);
  129. var
  130.   i: Integer;
  131.   targets: TIvTargetProperties;
  132. begin
  133.   if FTranslator = nil then
  134.     Exit;
  135.     
  136.   targets := TIvTargetProperties.Create;
  137.   FTranslator.DetectTargets(targets, False);
  138.   for i := 0 to targets.Count - 1 do
  139.   begin
  140.     with targets[i] do
  141.       AddNew(TargetClassName, TargetPropertyName, TargetType);
  142.   end;
  143.   targets.Free;
  144.  
  145.   UpdateButtons(Self);
  146. end;
  147.  
  148. procedure TIvTargetPropertiesDialog.AddButtonClick(Sender: TObject);
  149. var
  150.   dialog: TIvTargetPropertyDialog;
  151. begin
  152.   dialog := TIvTargetPropertyDialog.Create(nil);
  153.   if dialog.ShowModal = mrOk then
  154.   begin
  155.     AddItem(TIvTargetProperty.Create(
  156.       dialog.ClassNameEdit.Text,
  157.       dialog.PropertyNameEdit.Text,
  158.       TIvTargetType(dialog.TypeRadio.ItemIndex)));
  159.     UpdateButtons(Self);
  160.   end;
  161.   dialog.Free;
  162. end;
  163.  
  164. procedure TIvTargetPropertiesDialog.EditButtonClick(Sender: TObject);
  165. var
  166.   item: TIvTargetProperty;
  167.   dialog: TIvTargetPropertyDialog;
  168. begin
  169.   item := List.Selected.Data;
  170.   dialog := TIvTargetPropertyDialog.Create(nil);
  171.   dialog.SetItem(item);
  172.   if dialog.ShowModal = mrOk then
  173.   begin
  174.     item.TargetClassName := dialog.ClassNameEdit.Text;
  175.     item.TargetPropertyName := dialog.PropertyNameEdit.Text;
  176.     item.TargetType := TIvTargetType(dialog.TypeRadio.ItemIndex);
  177.     UpdateListItem(List.Selected);
  178.   end;
  179.   dialog.Free;
  180. end;
  181.  
  182. procedure TIvTargetPropertiesDialog.RemoveButtonClick(Sender: TObject);
  183. var
  184.   index: Integer;
  185. begin
  186.   TIvTargetProperty(List.Selected.Data).Free;
  187.   index := List.Selected.Index;
  188.   List.Items.Delete(index);
  189.   if List.Items.Count > 0 then
  190.   begin
  191.     if index >= List.Items.Count then
  192.       index := List.Items.Count - 1;
  193.     List.Items[index].Selected := True;
  194.   end;
  195.   UpdateButtons(Self);
  196. end;
  197.  
  198. procedure TIvTargetPropertiesDialog.UpdateButtons(Sender: TObject);
  199. begin
  200.   EditButton.Enabled := List.Selected <> nil;
  201.   RemoveButton.Enabled := EditButton.Enabled;
  202. end;
  203.  
  204. procedure TIvTargetPropertiesDialog.HelpButtonClick(Sender: TObject);
  205. begin
  206.   WinHelp(
  207.     Handle,
  208.     PChar(GetMLRegistryValue('RootDir', '') + '\docs\ivmulti.hlp'),
  209.     HELP_CONTEXT,
  210.     20000);
  211. end;
  212.  
  213. procedure TIvTargetPropertiesDialog.ClearList;
  214. var
  215.   i: Integer;
  216. begin
  217.   for i := 0 to List.Items.Count - 1 do
  218.     TIvTargetProperty(List.Items[i].Data).Free;
  219.   List.Items.Clear;  
  220. end;
  221.  
  222. procedure TIvTargetPropertiesDialog.FormDestroy(Sender: TObject);
  223. begin
  224.   ClearList;
  225. end;
  226.  
  227. procedure TIvTargetPropertiesDialog.ListKeyDown(Sender: TObject;
  228.   var Key: Word; Shift: TShiftState);
  229. begin
  230.   if (key = VK_DELETE) and (List.Selected <> nil) then
  231.     RemoveButtonClick(Self)
  232.   else if key = VK_INSERT then
  233.     AddButtonClick(Self);
  234. end;
  235.  
  236. procedure TIvTargetPropertiesDialog.FormCreate(Sender: TObject);
  237. begin
  238. {$IFDEF IVWIDE}
  239.   List.RowSelect := True;
  240. {$ENDIF}
  241. end;
  242.  
  243. end.
  244.